草庐IT

Android SurfaceView Canvas 用线程绘制

全部标签

c# - 在 Windows 窗体上绘制多个自定义矩形控件的最快方法是什么

背景我正在用c#.net构建一个Windows应用程序(winforms)。主窗体需要显示一个仪表板控件,它基本上是一个资源调度程序。时间在底部运行。在y轴上运行的项目。我过去用过ComponentGoResourceScheduler对于这类东西,但这次我需要更多的定制。所以我想建立自己的。我需要能够在表单上绘制矩形。大小基于开始和结束时间。我需要能够为矩形完全着色,还需要半填充。矩形需要在上方和下方有一个标签/文本。我需要能够捕获矩形上的鼠标事件。鼠标移动、双击等我需要能够在显示的“时间”发生变化时重新绘制矩形——即向前移动、向后移动(底部的按钮)。这是所需布局的模型:问题我基于P

windows - 可以在不同应用程序的窗口上绘制 OpenGL HUD 叠加层(不闪烁)吗?

我需要在另一个应用程序之上绘制一个由线条和文本组成的叠加层。所讨论的应用程序是3D外部世界视点,叠加层是平视显示器。我无权访问来自外部世界应用程序的任何类型的回调以在其绘制循环中执行绘制代码。直接在应用程序窗口上绘制会导致闪烁,因为绘制循环不会同步,所以对我来说这似乎不是一个选项。我能想到的一种方法是捕获外部世界应用程序的像素并将它们流式传输到我的应用程序中,这样我就可以在同一个绘制循环中在顶部绘制叠加层,但这似乎效率很低。有没有一种有效的方法可以在不闪烁的情况下绘制外部世界应用程序?是否可以在最终的显卡输出上/以显示器的刷新率绘制一些东西?附言它不一定是OpenGL,但HUD已经用O

windows - 使用GDI+绘制PixelFormat32bppPARGB图像使用常规公式而不是预乘公式

这里是一些显示问题的最小代码:staticconstintMAX_WIDTH=320;staticconstintMAX_HEIGHT=320;Gdiplus::BitmapforegroundImg(MAX_WIDTH,MAX_HEIGHT,PixelFormat32bppPARGB);{Gdiplus::Graphicsg(&foregroundImg);g.Clear(Gdiplus::Color(10,255,255,255));}Gdiplus::BitmapsoftwareBitmap(MAX_WIDTH,MAX_HEIGHT,PixelFormat32bppPARGB);

c# - 在我在同一进程中创建的所有其他线程死亡后停止线程

我正在尝试编写一个任何进程都可以用于日志记录的库。我想在我的类中有一个专用的工作线程,它通过某种机制(管道、TCP套接字等)将日志消息写入远程机器上的另一个进程,以便日志构造函数的代码看起来像这样(这样做的原因)这样一来,如果日志服务器在远程计算机上关闭,您就不会阻止正在日志记录的线程停止执行):publicLogWriter(){queueWriter=newThread(()=>{while(messageQueued.WaitOne()){Messagemessage;while(messageQueue.TryDequeue(outmessage)){boolsuccessfu

Windows 在单独的线程上重叠 IO 与 IO

在Windows上,当您进行I/O时,您可以使用OVERLAPPED选项进行异步操作。这样做与在另一个线程上同步执行I/O之间有什么区别吗?如果是这样,哪个更好?操作系统是否只是在异步情况下产生一个单独的线程,或者它只是在驱动程序线程上排队并发送信号而不是阻塞等待?谢谢! 最佳答案 WindowsI/O本质上是异步的,因此在.NET中执行异步操作,例如shouldnotuseathread,一旦操作完成,一些现有线程会被短暂借用以通知操作完成,但不会创建任何线程。这与在另一个线程上运行同步操作完全不同。它用完了一个线程,这使得程序的

c++ - 线程的输入和输出

我有一个带有两个线程的控制台应用程序。两个线程都向控制台输出。当一个线程等待输入而另一个线程正在写入输出时,这会造成混淆。是否可以拆分控制台;以便线程1写入控制台的左侧区域,线程2写入控制台的右侧区域? 最佳答案 在控制台上工作时,您不能同时进行这两项操作。您可以做的是在第一个线程等待输入时将输出重定向到字符串或流,然后在处理输入时将其输出到控制台。 关于c++-线程的输入和输出,我们在StackOverflow上找到一个类似的问题: https://stac

c++ - 如何防止 WSASend() 阻塞我的 UI 线程?

我想使用带有完成例程的重叠I/O来处理客户端连接。在我的UI线程中我想使用WSASend(),但是为了让系统调用我的回调函数来通知我数据已经发送,UI线程必须处于等待状态状态,但这会卡住我的UI!我该如何解决这个问题? 最佳答案 我同意@DavidHeffernan的观点——UI线程应该做UI的事情。IO线程肯定需要绑定(bind)和端口(服务器),或对等地址和端口(客户端)。来自ConnectEx或AcceptEx的套接字肯定更好地加载到IO线程中,但是带有(此时未定义)套接字成员的Socket类肯定可以在UI线程中创建并通知IO

c++ - 在多线程应用程序中设置硬件断点不会触发

我写了一个小调试器来分析和查找某些问题。现在我实现了一个硬件断点来检测被覆盖的内存地址的访问。当我用测试过程运行我的调试器时,一切正常。当我访问该地址时,断点将触发并记录调用堆栈。问题是,当我对运行多个线程的应用程序运行相同的程序时。我正在将断点复制到创建的每个线程以及主线程中。没有一个函数报告错误,一切看起来都很好,但是当访问该地址时,断点永远不会触发。所以我想知道是否有一些文档对此进行了描述,或者在多线程应用程序的情况下是否还有其他我必须做的事情。设置断点的函数是这样的:#ifndef_HARDWARE_BREAKPOINT_H#define_HARDWARE_BREAKPOINT

c++ - Windows:处理所有线程中的段错误

我正在寻找一种方法来捕获程序中任何地方的段错误和其他错误(它使用多个线程,其中一些是由外部库创建的)。我将VisualStudio2013与英特尔C++编译器2015结合使用。一些外部DLL-在某些情况下我什至在Windows驱动程序中看到过这种情况-可能包含我无法控制的错误,并且我的软件全天候运行24/7-我需要能够在某处记录崩溃并重新启动我的软件。到目前为止,我发现您可以设置一个信号处理程序来处理SIGSEGV和其他信号。根据我的阅读,在Linux下这将完全满足我的需要(为所有线程处理此信号),但在Windows下您需要分别为每个线程设置信号处理程序。因为我不是创建所有线程的人(如

c++ - 调试线程时无限循环

我正在尝试将硬件断点附加到游戏进程,我成功了。然后我试图遍历异常并等待我放在那里的异常,它也工作正常。问题是,在它发生之后,它进入了我无法刹车的无限循环。你能建议吗?我这样做的原因是我想在此时停止线程,使用Context读取EAX值,然后继续该过程。Header.h包括在这里调用的函数,它们都工作正常,因此我现在不包括它。#include"Header.h"#包括intmain(){SetDebugPrivilege(TRUE);DWORDdwProcessID=0;DWORDdwGame=0;printf("Lookingforgameprocess...\n");while(dwP